/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package muhnes.sizoo.consulta;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.model.SelectItem;
import org.primefaces.extensions.model.dynaform.DynaFormModel;
import org.primefaces.extensions.model.dynaform.DynaFormRow;

public class ConstructorFormulario {

    private ConstructorFormulario() {
    }
    
    public static void crearSelector(  DynaFormModel modeloFormulario, Fuente fuente ) {
        DynaFormRow fila = modeloFormulario.createRegularRow();
        
        List<SelectItem> items = new ArrayList<SelectItem>();
        for( Campo campo : fuente.getCampos() ) {
            items.add( new SelectItem( campo.getValor(), campo.getNombre() ) );
        }
        
        CampoFormulario selector = new CampoFormulario( fuente.getId(), fuente.getNombre(), null, false, items );
        fila.addControl(selector, "selector", 1, 1);
        
        CampoFormulario descripcion = new CampoFormulario(fuente.getId(), fuente.getDescripcion(), fuente.getDescripcion(), false );
        fila.addControl(descripcion, "descripcion", 1, 1);
        
    }
    
    public static void crearFiltro( DynaFormModel modeloFormulario, Campo campo ) {
        DynaFormRow fila = modeloFormulario.createRegularRow();
        
        CampoFormulario camp = new CampoFormulario(campo.getId(), campo.getNombre(), campo.getNombre(), true );
        fila.addControl(camp, "campo", 1, 1);
        
        List<SelectItem> itemsComparacion = new ArrayList<SelectItem>();
        
        if( campo.isMultivalorado() ) {
            itemsComparacion.add(new SelectItem(TipoComparacion.CONTIENE,"Contenido en"));
            itemsComparacion.add(new SelectItem(TipoComparacion.NO_CONTIENE,"No contenido en"));
        }
        else {
            itemsComparacion.add(new SelectItem(TipoComparacion.IGUAL,"Igual a"));
            itemsComparacion.add(new SelectItem(TipoComparacion.DISTINTO,"Distinto de"));
            
            if( campo.getTipoDato() == TipoDato.ENTERO || campo.getTipoDato() == TipoDato.DECIMAL || 
                campo.getTipoDato() == TipoDato.COORDENADA || campo.getTipoDato() == TipoDato.FECHA ) {
                itemsComparacion.add(new SelectItem(TipoComparacion.MENOR,"Menor que"));
                itemsComparacion.add(new SelectItem(TipoComparacion.MENOR_IGUAL,"Menor o igual que"));
                itemsComparacion.add(new SelectItem(TipoComparacion.MAYOR,"Mayor que"));
                itemsComparacion.add(new SelectItem(TipoComparacion.MAYOR_IGUAL,"Mayor o igual que"));
            }

            if( campo.getTipoDato() == TipoDato.CADENA ) {
                itemsComparacion.add(new SelectItem(TipoComparacion.INCLUYE,"Incluye"));
            }
        }
        
        CampoFormulario comparacion = new CampoFormulario( campo.getId(), "Comparacion", null, true, itemsComparacion );
        fila.addControl(comparacion, "comparacion", 1, 1);
        
        String tipo = "";
        
        if( campo.isMultivalorado() ) {
            tipo = "seleccion_multiple";
        }
        else if( campo.isSeleccionable() && campo.getTipoDato() != TipoDato.BOOLEANO ) {
            tipo = "seleccion_simple";
        }
        else if( campo.getTipoDato() == TipoDato.BOOLEANO ) {
            tipo = "seleccion_binaria";
        }
        else if( campo.getTipoDato() == TipoDato.FECHA ) {
            tipo = "calendario";
        }
        else if( campo.getTipoDato() == TipoDato.CADENA ||
                 campo.getTipoDato() == TipoDato.ENTERO ||
                 campo.getTipoDato() == TipoDato.DECIMAL ||
                 campo.getTipoDato() == TipoDato.COORDENADA ) {
            tipo = "entrada";
        }
        
        List<SelectItem> itemsOpciones = new ArrayList<SelectItem>();
        if( campo.getOpciones() != null && !campo.getOpciones().isEmpty() ) {
            for( Map.Entry<String,String> par : campo.getOpciones().entrySet() ) {
                itemsOpciones.add(new SelectItem(par.getKey(),par.getValue()));
            }
        }
        
        CampoFormulario valor = new CampoFormulario(campo.getId(), campo.getNombre(), null, true, itemsOpciones);
        fila.addControl(valor, tipo, 1, 1);
        
        CampoFormulario requerido = new CampoFormulario(campo.getId(), campo.getNombre(), true, true);
        fila.addControl(requerido, "requerido", 1, 1);
        
        Map<String,String> parametros = new HashMap<String,String>();
        parametros.put("fila", String.valueOf(fila.hashCode()));
        CampoFormulario eliminar = new CampoFormulario(campo.getId(), campo.getNombre(), null, true, parametros);
        fila.addControl(eliminar, "eliminar", 1, 1);
        
    }    
    
    public static void crearOrdenador(  DynaFormModel modeloFormulario, Campo campo  ) {
        DynaFormRow fila = modeloFormulario.createRegularRow();
        
        CampoFormulario camp = new CampoFormulario( campo.getId(), campo.getNombre(), campo.getNombre(), true);
        fila.addControl(camp, "campo", 1, 1);
        
        List<SelectItem> items = new ArrayList<SelectItem>();
        items.add( new SelectItem( TipoOrdenacion.ASCENDENTE, "Ascendente" ) );
        items.add( new SelectItem( TipoOrdenacion.DESCENDENTE, "Descendente" ) );
        CampoFormulario orden = new CampoFormulario( campo.getId(), "Ordenador", null, true, items );
        fila.addControl(orden, "ordenador", 1, 1);
        
        Map<String,String> parametros = new HashMap<String,String>();
        parametros.put("fila", String.valueOf(fila.hashCode()));
        CampoFormulario eliminar = new CampoFormulario(campo.getId(), campo.getNombre(), null, true, parametros);
        fila.addControl(eliminar, "eliminar", 1, 1);
        
    }
    
}
